package lambda;

/**
 * @author JIANGYOUYAO
 * @date 2021/8/10 0010
 * Lambda
 * 1、简化了匿名内的定义
 * 2、允许把函数作为一个方法的参数（函数作为参数传递进方法中）
 * 3、语法格式
 * (parameters) -> expression
 * 或
 * (parameters) ->{ statements; }
 *
 * lambda表达式的重要特征:
 *
 * 可选类型声明：不需要声明参数类型，编译器可以统一识别参数值。
 *  x -> 2 * x
 * 可选的参数圆括号：一个参数无需定义圆括号，但多个参数需要定义圆括号。
 *  x -> 2 * x
 * (x, y) -> x – y
 * 可选的大括号：如果主体包含了一个语句，就不需要使用大括号。
 * x -> 2 * x
 * 可选的返回关键字：如果主体只有一个表达式返回值则编译器会自动返回值，大括号需要指定明表达式返回了一个数值。
 * x -> 2 * x
 *
 *
 */

public class Tester1 {


    public static void main(String[] args) {
        Tester1 tester = new Tester1();

        // 类型声明
        MathOperation addition = ( a,  b) -> a + b;
        System.out.println("10 + 5 = " + tester.operate(10, 5, addition));

    }

    interface MathOperation {
        int operation(int a, int b);
    }

    private int operate(int a, int b, MathOperation mathOperation){
        return mathOperation.operation(a, b);
    }




}
